//
//  NSString+NumberVerify.m
//  JPWords
//
//  Created by 吳亨利 on 2025/3/11.
//

#import "NSString+NumberVerify.h"

@implementation NSString (NumberVerify)


- (NBPhoneNumberUtil *)_phoneNumberUtil {
    NBPhoneNumberUtil *_phoneNumberUtil = objc_getAssociatedObject(self, _cmd);
    if (_phoneNumberUtil == nil) {
        NBMetadataHelper *metadataHelper = [[NBMetadataHelper alloc] init];
        _phoneNumberUtil = [[NBPhoneNumberUtil alloc] initWithMetadataHelper:metadataHelper];
        objc_setAssociatedObject(self, _cmd, _phoneNumberUtil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    return _phoneNumberUtil;
}

// 使用国家代码解析电话号码
- (BOOL)parseForPhoneNumberWithCountryCode:(NSString *)countryCode {
    if ([self containsString:@" "]) {
        return NO;
    }
    
    // 根据区号（如86、852）获取对应的国家代码（如CN、HK）
    NSString *regionCode = [self getRegionCodeFromPhoneCode:countryCode];
    if (!regionCode) {
        return NO;
    }
    
    NBPhoneNumberUtil *phoneNumberUtil = [self _phoneNumberUtil];
    NSError *error = nil;
    
    // 解析电话号码
    NBPhoneNumber *number = [phoneNumberUtil parse:self
                                       defaultRegion:regionCode
                                              error:&error];
    
    // 如果出现错误或号码无效
    if (error || ![phoneNumberUtil isValidNumber:number]) {
        return NO;
    }
    return YES;
}

// 根据区号（如86、852）返回对应的国家代码（如CN、HK）
- (NSString *)getRegionCodeFromPhoneCode:(NSString *)phoneCode {
    // 创建NBPhoneNumberUtil实例
    NBPhoneNumberUtil *phoneNumberUtil = [self _phoneNumberUtil];
    
    // 将区号（如86、852）转换为NSNumber
    NSNumber *countryCode = @([phoneCode integerValue]);
    
    // 获取对应的国家代码（例如：CN、HK）
    NSString *regionCode = [phoneNumberUtil getRegionCodeForCountryCode:countryCode];
    
    return regionCode;
}


@end
